package com.link.base.base.statistics.service;

import com.link.base.base.statistics.model.Statistics;
import com.link.core.basic.service.BasicService;


/**
 * 存储知识库、论坛帖子、案例库等对象用户浏览、阅读、收藏、点赞记录
 *
 * @author ouyangzhenqiang
 * @date 2018/11/6
 */
public interface StatisticsService  extends BasicService<Statistics> {

    /**
     * 记录浏览量和阅读人数
     * 浏览量为每次打开都算一次，阅读人数需要按照用户Id来区分，一人多次浏览始终算一次阅读
     *
     * @author ouyangzhenqiang
     * @date 2018/11/6
     * @param record 统计对象
     */
    Statistics increasePageView(Statistics record) throws Exception;

    /**
     * 点赞/收藏的具体数据处理逻辑
     *
     * @author ouyangzhenqiang
     * @date 2018/11/6
     * @param type 点赞/收藏
     * @param record 统计对象
     */
    String dealDataForThumbAndCollect(String type, Statistics record) throws Exception;
    
    /**
     * 按模块名称和模块记录Id，查询点赞数、收藏数、浏览量
     * 
     * @author ouyangzhenqiang
     * @date 2018/11/6
     * @param moduleName 模块名称
     * @param moduleId 模块对象数据Id
     */
    Statistics getStatisticsByModuleRecord(String moduleName, Long moduleId) throws Exception;

    /**
     * 按模块名称、模块记录Id、用户Id，查询用户在模块记录上是否有点赞、收藏记录
     *
     * @author ouyangzhenqiang
     * @date 2018/11/6
     * @param moduleName 模块名称
     * @param moduleId 模块对象数据Id
     * @param userId 用户Id
     */
    Statistics getFlagByModuleAndUser(String moduleName, Long moduleId, Long userId) throws Exception;

    /**
     * 检查关键参数
     *
     * @author ouyangzhenqiang
     * @date 2018/11/6
     * @param record 统计对象
     */
    void check(Statistics record) throws Exception;

    /**
     * 回写redis中记录的浏览量、阅读人数、点赞数、收藏数到DB
     *
     * @author ouyangzhenqiang
     * @date 2019/03/06 21:28
     */
    void writeBackFromRedisToDB() throws Exception;

}
